package com.sky.service.impl;

import com.sky.context.BaseContext;
import com.sky.dto.ShoppingCartDTO;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.entity.ShoppingCart;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.mapper.ShoppingCartMapper;
import com.sky.service.ShoppingCartService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Slf4j
@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {
  @Autowired
  private ShoppingCartMapper shoppingCartMapper;
  @Autowired
  private DishMapper dishMapper;
  @Autowired
  private SetmealMapper setmealMapper;

  @Override
  public void add(ShoppingCartDTO shoppingCartDTO) {
    // 1. 如果商品在数据库中已经存在，那么update数量即可，如果不存在则insert一条
    ShoppingCart shoppingCart = new ShoppingCart();
    BeanUtils.copyProperties(shoppingCartDTO, shoppingCart);
    Long userId = BaseContext.getCurrentId();
    shoppingCart.setUserId(userId);

    List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);
    if(list != null && list.size() > 0){
      ShoppingCart newShoppingCart = list.get(0);
      Integer number = newShoppingCart.getNumber() + 1;
      newShoppingCart.setNumber(number);
      shoppingCartMapper.update(newShoppingCart);
    } else {
      Long dishId = shoppingCartDTO.getDishId();
      // 2. 如果是菜品就获取菜品信息，否则获取套餐信息
      if(dishId != null){
        Dish dish = dishMapper.getDishById(dishId);
        shoppingCart.setName(dish.getName());
        shoppingCart.setImage(dish.getImage());
        shoppingCart.setAmount(dish.getPrice());
      } else {
        Long setmealId = shoppingCartDTO.getSetmealId();
        Setmeal setmeal = setmealMapper.getById(setmealId);

        shoppingCart.setName(setmeal.getName());
        shoppingCart.setImage(setmeal.getImage());
        shoppingCart.setAmount(setmeal.getPrice());
      }
      shoppingCart.setNumber(1);
      shoppingCart.setCreateTime(LocalDateTime.now());
      // 3. 统一入库
      shoppingCartMapper.add(shoppingCart);
    }
  }

  @Override
  public List<ShoppingCart> list() {
    Long userId = BaseContext.getCurrentId();
    List<ShoppingCart> list = shoppingCartMapper.getListByUserId(userId);
    return list;
  }

  @Override
  public void clear() {
    Long userId = BaseContext.getCurrentId();
    shoppingCartMapper.clear(userId);
  }

}
